分类
联系方式
  1. 新浪微博
  2. E-mail

Racket Procedures

apply

语法:

(apply proc v ... lst #:<kw> kw-arg ...)  any
  proc : procedure?
  v : any/c
  lst : list?
  kw-arg : any/c

使用 (list* v ... lst) 的内容作为 (by-position) 参数来应用 proc

#:<kw> kw-arg 序列也作为关键字参数提供给 proc,其中 #:<kw> 代表任何关键字。

进行方法调用的方式:

> (apply + '(1 2 3))
6

> (apply + 1 2 '(3))
6

> (apply + '())
0
> (apply sort (list (list '(2) '(1)) <) #:key car)
'((1) (2))

其中:

  • (list (list '(2) '(1)) <) 是一个列表
    • 第一个元素是 (list '(2) '(1))
    • 第二个元素是
  • 将这个列表传入 sort,即对 (list '(2) '(1)) 应用 < 进行排序
    • sort 会解析第一个 list,两个参数分别是 '(2)'(1),尽管都只有一个元素,但这是两个列表
    • 这时使用了 #:key car 传入 sort,告诉 sort 取列表的首个元素参与大小对比
    • 最终得到结果 '((1) (2))

compose

compose 能够将传入的多个函数形成函数链(输入输出要能兼容)。

> ((compose1 - sqrt add1) 8)
-3

> ((compose1 add1 sqrt -) 8)
1.0+2.8284271247461903i

compose1 是只接收 1 个参数的特殊版本。

调用顺序是:右边的先调,左边的后调

网络资源

3 写点有意义的代码 (tyrchen.github.io)